const { spawn } = require('child_process');
const { kill } = require('process');
const net = require('net');

// 存储子进程的引用
let viteProcess = null;
let electronProcess = null;

// 检测端口是否可用
function isPortAvailable(port, callback) {
  const server = net.createServer();
  server.listen(port, () => {
    server.once('close', () => {
      callback(true);
    });
    server.close();
  });
  server.on('error', () => {
    callback(false);
  });
}

// 启动 Vite 开发服务器
function startVite() {
  console.log('正在启动 Vite 开发服务器...');
  viteProcess = spawn('npx', ['vite'], { stdio: 'inherit', shell: true });
  
  viteProcess.on('close', (code) => {
    console.log(`Vite 进程退出，退出码: ${code}`);
  });
  
  viteProcess.on('error', (error) => {
    console.error('启动 Vite 时出错:', error);
  });
}

// 启动 Electron 应用
function startElectron() {
  console.log('正在启动 Electron 应用...');
  electronProcess = spawn('npx', ['cross-env', 'NODE_ENV=development', 'electron', '.'], { 
    stdio: 'inherit', 
    shell: true 
  });
  
  electronProcess.on('close', (code) => {
    console.log(`Electron 进程退出，退出码: ${code}`);
  });
  
  electronProcess.on('error', (error) => {
    console.error('启动 Electron 时出错:', error);
  });
}

// 关闭所有进程
function stopAllProcesses() {
  console.log('正在关闭所有进程...');
  if (viteProcess) {
    viteProcess.kill();
  }
  if (electronProcess) {
    electronProcess.kill();
  }
}

// 监听退出信号
process.on('SIGINT', () => {
  console.log('接收到 SIGINT 信号，正在关闭进程...');
  stopAllProcesses();
  process.exit(0);
});

process.on('SIGTERM', () => {
  console.log('接收到 SIGTERM 信号，正在关闭进程...');
  stopAllProcesses();
  process.exit(0);
});

// Windows 专用的退出信号处理
if (process.platform === 'win32') {
  const rl = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
  });

  rl.on('SIGINT', () => {
    process.emit('SIGINT');
  });
}

// 启动所有服务
console.log('正在启动开发环境...');
startVite();

// 等待几秒后启动 Electron
setTimeout(() => {
  startElectron();
}, 5000);